1. Technical Field
This invention generally relates to computer systems, and more specifically relates to connections for communicating between computer systems.
2. Background Art
Many computer systems today are highly networked to provide a variety of different computing services. For example, client computer systems may connect to server computer systems to request certain services hosted by the server computer systems. When a user uses a web browser to request a web page, the user's computer system typically sends a request for the web page, which causes the web server that hosts the web page to deliver the requested web page to the user's web browser.
Hypertext transfer protocol (HTTP) was developed to allow for transmission of data between computer systems. In the original HTTP version 1.0 specification, a client computer system has to establish a connection known as a socket with a server computer system for each object or component to be transferred. With an early web page that only had, for example, three components, the overhead of opening a different connection to transfer each of the three components was not terribly significant. However, modern web pages may have a large number of different components. The overhead of opening and closing a connection for each component on a web page becomes a significant drain on the resources of web server computer systems.
To help alleviate this problem, the concept of an HTTP keep-alive was developed, and was put into the HTTP version 1.1 specification. A client (such as a web browser) may inform the server with a web page request that the client supports keep-alives. In response, the server may tell the client that the connection will be kept alive so that multiple components may be transferred over the same connection. For example, by keeping the connection open, multiple images on a web page may be transferred on the same connection when the connection is kept alive. A keep-alive specification may specify a timeout period for the connection in either time units or in the number of objects transferred across the connection. Once the specification is satisfied, the connection is closed by the server.
The general concept of HTTP keep-alives is very useful at reducing overhead on web server computer systems in many circumstances. However, the usefulness of keep-alives depends largely upon the volume and type of work the server is performing, and the keep-alive specification. The enablement of keep-alives is typically performed at a global level on the web server, which means that they are either manually turned on or manually turned off. In some cases, the keep-alives may actually reduce server performance. Without a way to dynamically enable, disable, and adjust the settings of connection keep-alives, the computer industry will continue to suffer from less-than-optimal performance in a web server that uses connection keep-alives.